#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <strings.h>

int main(void)
{
    //检查管道是否存在，不存在则创建
    if( access("/tmp/logfifo" , F_OK))
        mkfifo("/tmp/logfifo" , 0666);
    
    //打开管道文件,日志文件
    int fifo_fd = open("/tmp/logfifo", O_RDWR);
    if (fifo_fd < 0)
    {
        perror("open failed\n");
        return -1;
    }

    //以只写,创建，追加方式打开
    int log_fd = open("log.txt", O_WRONLY | O_CREAT | O_APPEND, 0666);
    if (log_fd < 0)
    {
        perror("open log failed\n");
        close(fifo_fd);
        return 0;
    }
    
    //从管道读数据，写入日志文件
    char buf[1024];
    int n_read = 0;
    while (1)
    {
        bzero(buf,1024);
        n_read = read(fifo_fd, buf,1024);
        write(log_fd,buf,n_read);
    }
    
    //关闭文件
    close(fifo_fd);
    close(log_fd);
    
    return 0;
}